package net.maxupeng.asm74.util;

import java.util.regex.Pattern;

public class NumberUtil {
    /**
     * 判断字符串是否为整数格式
     * 支持的格式包括：
     * - 十六进制：以 $ 或 0x/0X 开头
     * - 二进制：以 0b/0B 开头
     * - 十进制：纯数字
     *
     * @param str 待检测的字符串
     * @return 如果是整数格式返回true，否则返回false
     */
    public static boolean isIntStr(String str) {
        return Pattern.matches("0[xX][0-9a-fA-F]*|\\$[0-9a-fA-F]*|0[bB][01]*|[0-9]*", str);
    }

    /**
     * 将字符串转换为整数
     * 支持多种进制格式：
     * - 以 $ 开头的十六进制数（如：$FF）
     * - 以 0x 或 0X 开头的十六进制数（如：0xFF）
     * - 以 0b 或 0B 开头的二进制数（如：0b1010）
     * - 默认十进制数（如：123）
     *
     * @param str 待转换的字符串
     * @return 转换后的整数值
     * @throws NumberFormatException 如果字符串不是有效的数字格式
     */
    public static int str2int(String str) {
        if (str.startsWith("$")) {
            // 处理以$开头的十六进制数，如 $FF
            return Integer.parseInt(str.substring(1), 16);
        } else if (str.toLowerCase().startsWith("0x")) {
            // 处理以0x开头的十六进制数，如 0xFF
            return Integer.parseInt(str.substring(2), 16);
        } else if (str.toLowerCase().startsWith("0b")) {
            // 处理以0b开头的二进制数，如 0b1010
            return Integer.parseInt(str.substring(2), 2);
        } else {
            // 默认按十进制处理
            return Integer.parseInt(str, 10);
        }
    }
}
